#ifndef JSEMAPHORE_H
#define JSEMAPHORE_H

#include "jthreadpool_global.h"

// - class JSemaphore -

class JSemaphorePrivate;
class QSemaphore;

/**
 * @brief The JSemaphore class
 */
class JTHREADPOOL_EXPORT JSemaphore
{
public:

    /**
     * @brief JSemaphore
     * @param n
     */
    explicit JSemaphore(int n = 0);
    ~JSemaphore();

    /**
     * @brief acquire
     * @param n
     */
    void acquire(int n = 1);

    /**
     * @brief tryAcquire
     * @param n
     * @return
     */
    bool tryAcquire(int n = 1);

    /**
     * @brief tryAcquire
     * @param n
     * @param timeout
     * @return
     */
    bool tryAcquire(int n, int timeout);

    /**
     * @brief release
     * @param n
     */
    void release(int n = 1);

    /**
     * @brief available
     * @return
     */
    int available() const;

private:
    J_DISABLE_COPY(JSemaphore)
    JSemaphorePrivate *d;
};

#endif // JSEMAPHORE_H
